﻿using System;
using System.Collections.Generic;
using Interfaces;
using Modelo;
using Datos.Excepciones;
using System.Windows.Forms;
using Datos.FabricaDAO;
using Datos.InterfacesDAO;
using System.Web.UI.WebControls;

namespace Presentador
{
    public class PresentadorHome
    {
        private IHome _home;

        public PresentadorHome(IHome home)
        {
            _home = home;
        }

        //<summary>
        // Método que llena la lista de la ubicacion de cámaras almacenada en la BD
        //</summary> 
        public void ListaUbicacion(IList<Ubicacion> listaUbicacionCamara)
        {
            try
            {
                foreach (Ubicacion ubicacion in listaUbicacionCamara)
                {
                    _home.Ubicacion.Items.Add(new ListItem(ubicacion.NombreUbicacion, ubicacion.CodigoUbicacion));
                }
                _home.Ubicacion.DataBind();
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }
        }

        //<summary>
        // Método que imprime la lista de las ubicaciones de cámara registradas en la BD
        //</summary> 
        public void ImprimeListaUbicacion()
        {
            try
            {
                IDAO_Informacion daoReporte = FabricaDAO.DAOInformacion();

                IList<Ubicacion> ubicacionCamaras = daoReporte.ListaUbicacion();
                ListaUbicacion(ubicacionCamaras);
            }
            catch (ExcepcionConsultar e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorConsulta + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                                MessageBoxOptions.ServiceNotification);
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }

        }

        //<summary>
        // Método que llena la lista de horas almacenadas en la BD
        //</summary> 
        public void ListaHoras(IList<Horario> ListaHorasReporte)
        {
            try
            {
                foreach (Horario hora in ListaHorasReporte)
                {
                    _home.Hora.Items.Add(new ListItem(hora.Hora, hora.CodigoHorario));
                }
                _home.Hora.DataBind();
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }
        }

        //<summary>
        // Método que imprime la lista de las horas registradas en la BD
        //</summary> 
        public void ImprimeHora()
        {
            try
            {
                IDAO_Informacion daoReporte;
                daoReporte = FabricaDAO.DAOInformacion();

                IList<Horario> hora = daoReporte.ListaHoras();
                ListaHoras(hora);
            }
            catch (ExcepcionConsultar e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorConsulta + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                                MessageBoxOptions.ServiceNotification);
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }

        }

        //<summary>
        // Método que llena la lista de Sentido del Tráfico almacenado en la BD
        //</summary> 
        public void ListaSentido(IList<Sentido> ListaSentidoReporte)
        {
            try
            {
                //_home.Sentido.Items.Clear();

                foreach (Sentido sentido in ListaSentidoReporte)
                {
                    _home.Sentido.Items.Add(new ListItem(sentido.TipoSentido, sentido.CodigoSentido));
                }
                _home.Hora.DataBind();
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }
        }

        //<summary>
        // Método que imprime la lista de sentidos registrados en la BD
        //</summary> 
        public void ImprimeSentido()
        {
            try
            {
                string ubicacion = _home.Ubicacion.SelectedValue.ToString();
                IDAO_Informacion daoReporte;
                daoReporte = FabricaDAO.DAOInformacion();

                IList<Sentido> sentido = daoReporte.ListaSentido(ubicacion);
                ListaSentido(sentido);
            }
            catch (ExcepcionConsultar e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorConsulta + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                                MessageBoxOptions.ServiceNotification);
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);
            }

        }

        //<summary>
        // Método que Registra la Configuración realizada por el usuario
        //</summary> 
        public bool RegistraConfiguracion()
        {
            try
            {
                string idUsuario = _home.infoIdUsuario;

                Reporte configuracion = new Reporte();
                configuracion.UbicacionReporte = _home.Ubicacion.SelectedValue.ToString();
                configuracion.HorarioReporte = _home.Hora.SelectedValue.ToString();
                configuracion.SentidoReporte = _home.Sentido.SelectedValue.ToString();

                IDAO_Informacion daoReporte;
                daoReporte = FabricaDAO.DAOInformacion();

                bool verificaConfiguracion = daoReporte.VerificaExistenciaConfiguracion(configuracion, idUsuario);

                //Si la Configuración no está registrada para el usuario
                if (verificaConfiguracion == false)
                {
                    bool registroConfiguracion = daoReporte.InsertaConfiguracion
                   (configuracion, idUsuario);

                    return registroConfiguracion;
                }
                else
                {
                    MessageBox.Show(Presentador_Recursos.ExisteConfiguracion, Presentador_Recursos.Informacion,
                    MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                    MessageBoxOptions.ServiceNotification);

                    return false;
                }
            }
            catch (ExcepcionRegistrar e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorRegistro + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);

                return false;
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);

                return false;
            }
        }

        //<summary>
        // Método que Elimina la Configuración realizada por el usuario
        //</summary> 
        public bool EliminaConfiguracion(int idReporte)
        {
            try
            {
                string idUsuario = _home.infoIdUsuario;
                string idRep = Convert.ToString(idReporte);

                IDAO_Informacion daoReporte;
                daoReporte = FabricaDAO.DAOInformacion();

                bool actualizarConfReporte = daoReporte.EliminaConfiguracion(idRep, idUsuario);

                return actualizarConfReporte;

            }
            catch (ExcepcionRegistrar e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorRegistro + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);

                return false;
            }
            catch (ExcepcionReporteTrafico e)
            {
                MessageBox.Show(Presentador_Recursos.ErrorSistema + "\n" + Presentador_Recursos.DetallesError + "\n" + e.InnerException, Presentador_Recursos.Error,
                MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
                MessageBoxOptions.ServiceNotification);

                return false;
            }
        }

    }
}
